package ch.ifage.business.dom;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;


/**
 * Mod�le d'une police d'assurance.
 * @author Betty B�
 *
 */
@Entity
@Table(name= "polices")
public class Police implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8607023189414645251L;
	@Id
	@Column(name= "id_police")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int mId;
	/** * Le client couvert par la police.*/
	@ManyToOne
	@JoinColumn(name = "id_entreprise_client")
	private Client mClient;
	/** * L'assureur �m�tteur de la police.*/
	@ManyToOne
	@JoinColumn(name = "id_entreprise_assureur")
	private Assureur mAssureur;
	/** * Le num�ro.*/
	@Column(name = "numero_police")
	private String mNumeroPolice;
	/** * La date d'entr�e.*/
	@Temporal(TemporalType.DATE)
	@Column(name= "date_debut")
	private Date mDateDebut;
	/** * La date d'�ch�ance.*/
	@Temporal(TemporalType.DATE)
	@Column(name= "date_fin")
	private Date  mDateFin;
	/** * La prime.*/
	@Column(name = "prime")
	private Double mPrime;
	/** * La liste des sinistres d�clar� sous cette police.*/
	@OneToMany
	@JoinColumn(name = "id_police")
	private List<Sinistre> mListeSinistres;
	/** * Indicateur du statut de la police, elle est active
	 * tant que son client ou assureur n'a pas �t� supprim�.*/
	@Column(name = "actif")
	private boolean mActif;
	/** * D�termine ce qui est �crit dans le champs statut
	 *  selon que la police soit active ou non.*/
	@Column(name = "statut")
	private String mStatut;
	/** *Constructeur g�n�rant par d�faut une liste de sinistre.
     * La police est active par d�faut et 
     * son statut est indiqu� comme OK en cons�quence. */
	public Police() {
		this.mListeSinistres = new ArrayList<Sinistre>();
		this.setActif(true);
		this.setStatut("Ok");
		}
	public int getId() {
		return mId;
	}
	/** * @param actif
	 *    Sp�cifie si la police est active.*/
	public final void setActif(final boolean actif) {
		this.mActif = actif;
	}
	/** * @return l'�tat de la police. */
	public final boolean getActif() {
		return mActif;
	}
	/** * @param statut
	 *    Le texte affich� indiquant le statut.*/
	public final void setStatut(final String statut) {
		this.mStatut = statut;
	}
	/** * @return Le statut. */
	public final String getStatut() {
		return this.mStatut;
	}
	/** * @return le domaine d'activit�. */
	public final Client getClient() {
		return mClient;
	}
	/** * @param client
	 *    Le client assur� � sp�cifier.*/
	public final void setClient(final Client client) {
		this.mClient = client;
	}
	/** * @return L'assureur. */
	public final Assureur getAssureur() {
		return mAssureur;
	}
	/** * @param assureur
	 *    L'assureur � sp�cifier.*/
	public final void setAssureur(final Assureur assureur) {
		this.mAssureur = assureur;
	}
	/** * @return le domaine d'activit�. */
	public final String getNumeroPolice() {
		return mNumeroPolice;
	}
	/** * @param numeroPolice
	 *    Le num�ro � sp�cifier.*/
	public final void setNumeroPolice(final String numeroPolice) {
		this.mNumeroPolice = numeroPolice;
	}
	/** * @return La date d'entr�e. */
	public final Date getDateDebut() {
		return mDateDebut;
	}
	/** * @param dateDebut
	 *    La date d'entr�e � sp�cifier.*/
	public final void setDateDebut(final Date dateDebut) {
		this.mDateDebut = dateDebut;
	}
	/** * @return La date d'�ch�ance. */
	public final Date getDateFin() {
		return mDateFin;
	}
	/** * @param dateFin
	 *    La date d'�ch�ance.*/
	public final void setDateFin(final Date dateFin) {
		this.mDateFin = dateFin;
	}
	/** * @return La prime. */
	public final Double getPrime() {
		return mPrime;
	}
	/** * @param prime
	 *    La prime � sp�cifier.*/
	public final void setPrime(final Double prime) {
		this.mPrime = prime;
	}
	/** * @return le domaine d'activit�. */
	public final List<Sinistre> getListeSinistres() {
		return mListeSinistres;
	}
	/** * @param listeSinistres
	 *    La liste des sinistres.*/
	public final void setListeSinistres(final List<Sinistre>listeSinistres) {
		this.mListeSinistres = listeSinistres;
	}
	/** * @return la cl�. */
	public final String getKey()  {
		return String.valueOf(hashCode());
	}
	/** * @return le numero de la police dont on obtient le hashCode,
	 *  sinon -1 est retourn�. */
	public final int hashCode()  {
		if (this.mNumeroPolice != null)  {
			return this.mNumeroPolice.hashCode();
		} else {
			return -1;
		}
	}
}
